/*
 * @lc app=leetcode.cn id=153 lang=golang
 *
 * [153] 寻找旋转排序数组中的最小值
 */

// @lc code=start
func findMin(nums []int) int {
	l, r := 0, len(nums)-1
	index := 0

	if nums[len(nums)-1] >= nums[index] { // 顺序递增时
		return nums[index]
	}

	for l <= r {
		index = (l + r) / 2
		if index-1 >= 0 && index-1 <= len(nums)-1 && index+1 >= 0 && index+1 <= len(nums)-1 {
			if nums[index] < nums[index-1] && nums[index] < nums[index+1] { // 比左边小 也比右边小，就是最小的
				return nums[index]
			}
		}

		if nums[index] >= nums[0] {
			l = index + 1
		} else {
			r = index - 1
		}
	}

	return nums[index]
}

// @lc code=end

